package controller

import (
	"gitee.com/Frank098/devops-app-mgt/model"
	"gitee.com/Frank098/devops-app-mgt/service"
	"github.com/gin-gonic/gin"
)

var Namespace namespace

type namespace struct{}

// @Tags Namespace
// @Summary 获取Namespace信息
// @Accept json
// @Produce json
// @Param namespace_name query string true "namespace名称"
// @Success 200 {object} model.Result ""
// @Failure 400 {object} model.Result""
// @Router /namespaces/info [GET]
func (n *namespace) GetNamespaceInfo(ctx *gin.Context) {
	var params model.GetNameSpace
	if err := ctx.Bind(&params); err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	data, err := service.Namespace.GetNamespaceInfo(params.NamespaceName)
	if err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	SuccessResponse(ctx, &model.Result{
		Code: 200,
		Msg:  "Success",
		Data: data,
	})
}

// @Tags Namespace
// @Summary 获取Namespace列表
// @Accept json
// @Produce json
// @Success 200 {object} model.Result ""
// @Failure 400 {object} model.Result""
// @Router /namespaces/list [GET]
func (n *namespace) GetAllNamespace(ctx *gin.Context) {
	data, err := service.Namespace.GetAllNamespace()
	if err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	SuccessResponse(ctx, &model.Result{
		Code: 200,
		Msg:  "Success",
		Data: data,
	})
}

// @Tags Namespace
// @Summary 删除Namespace
// @Accept json
// @Produce json
// @Param "" body model.GetNameSpace true "删除Namespace"
// @Success 200 {object} model.Result ""
// @Failure 400 {object} model.Result""
// @Router /namespaces/del [DELETE]
func (n *namespace) DeleteNamespace(ctx *gin.Context) {
	var params model.GetNameSpace
	if err := ctx.ShouldBindJSON(&params); err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	if err := service.Namespace.DeleteNamespace(params.NamespaceName); err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	SuccessResponse(ctx, &model.Result{
		Code: 200,
		Msg:  "Success",
		Data: "执行删除namespace成功",
	})
}

// @Tags Namespace
// @Summary 创建Namespace
// @Accept json
// @Produce json
// @Param "" body model.CreateNamespace true "创建Namespace"
// @Success 200 {object} model.Result ""
// @Failure 400 {object} model.Result""
// @Router /namespaces/create [POST]
func (n *namespace) CreateNamespace(ctx *gin.Context) {
	var params model.CreateNamespace
	if err := ctx.ShouldBindJSON(&params); err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	if err := service.Namespace.CreateNamespace(&params); err != nil {
		ErrorResponse(ctx, err, 400)
		return
	}
	SuccessResponse(ctx, &model.Result{
		Code: 200,
		Msg:  "Success",
		Data: "执行创建namespace成功",
	})
}
